module.exports = {
  apps: [{
    name: 'express-knex-app',
    script: 'src/server.js',
    instances: 'max', // 使用所有可用CPU核心
    exec_mode: 'cluster', // 集群模式
    
    // 环境变量
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    
    // 开发环境配置
    env_development: {
      NODE_ENV: 'development',
      PORT: 3000,
      LOG_LEVEL: 'debug'
    },
    
    // 生产环境配置
    env_production: {
      NODE_ENV: 'production',
      PORT: 3000,
      LOG_LEVEL: 'info'
    },
    
    // 日志配置
    error_file: './logs/err.log',
    out_file: './logs/out.log',
    log_file: './logs/combined.log',
    time: true,
    
    // 进程管理配置
    max_restarts: 10, // 最大重启次数
    min_uptime: '10s', // 最小运行时间
    max_memory_restart: '1G', // 内存超过1G时重启
    
    // 监听文件变化重启（仅开发环境）
    watch: false,
    ignore_watch: [
      'node_modules',
      'logs',
      '*.log'
    ],
    
    // 其他配置
    autorestart: true,
    node_args: '--max-old-space-size=1024', // Node.js内存限制
    
    // 集群配置
    kill_timeout: 5000, // 强制杀死进程前等待时间
    listen_timeout: 3000, // 监听超时时间
    
    // 健康检查
    health_check_grace_period: 3000
  }],

  // 部署配置
  deploy: {
    production: {
      user: 'deploy',
      host: 'your-server.com',
      ref: 'origin/main',
      repo: 'git@github.com:username/express-knex.git',
      path: '/var/www/express-knex',
      'post-deploy': 'npm ci --only=production && npm run migrate:latest && pm2 reload ecosystem.config.js --env production && pm2 save'
    },
    
    staging: {
      user: 'deploy',
      host: 'staging-server.com',
      ref: 'origin/develop',
      repo: 'git@github.com:username/express-knex.git',
      path: '/var/www/express-knex-staging',
      'post-deploy': 'npm ci && npm run migrate:latest && pm2 reload ecosystem.config.js --env staging && pm2 save'
    }
  }
};